# 关键字参数赋值,就是根据形参名称对于指定的形参进行赋值的方式
# 格式: 形参名=值
# 之前我们使用过 print('adfas', end=' ')  end=' '就是关键字参数赋值

def func1(a, b, c, d):
    print(a, b, c, d)


# 1. 能够使用位置参数赋值的函数,一定可以使用关键字参数赋值
func1(a=1, b=2, c=3, d=4)

# 2. 关键字参数赋值,可以跳跃赋值,不需要按照形参位置顺序赋值
func1(b=2, c=3, a=1, d=4)

# 3. 位置参数赋值,和关键字参数赋值,可以同时使用
func1(1, 2, c=3, d=4)

# 4. 使用关键字参数赋值时注意不能给同一个参数重复赋值
# SyntaxError: keyword argument repeated
# func1(a=1, b=2, c=3, d=4, a=5)
# ypeError: func1() got multiple values for argument 'a'
# 此处位置参数赋值时,按序给ab已经赋值完成,后续又实用关键字参数进行了赋值,所以报错.
# func1(1, 2, a=3, b=4, c=5, d=6)

# 5. 使用关键字参数赋值时,注意不能少赋值
# TypeError: func1() missing 1 required positional argument: 'd'
# func1(a=1, b=2, c=3)


# 6. 使用关键字参数赋值时,形参名称必须存在,否则报错
# TypeError: func1() got an unexpected keyword argument 'f'
# func1(a=1, b=2, c=3, d=4, f=5)


print('-----------------------------')
# 练习：
# 写一个函数，向函数内传入两个整数参数 m和n  计算m到n的累加和。
# 要求：使用位置参数和关键字参数两种赋值形式调用

# 第一步: 不书写函数,直接书写代码
m = 4
n = 8
sum1 = 0
for i in range(m, n + 1):
    sum1 += i

print(sum1)

print('-----------------------------')
# 第二步: 我们将功能代码封装到函数中,将m n 变量改写为函数的形参

def func1(m, n):
    sum1 = 0
    for i in range(m, n + 1):
        sum1 += i
    # 函数需要将数据进行返回
    return sum1


print(func1(4, 8))
print(func1(m=4, n=8))
